Принципы ООП: практика
Это полностью практический урок. В нём вас ждёт шесть тренажёрных задач, которые помогут усвоить теорию о принципах ООП. Удачи!
6.
Опишите на ООП взаимодействие студента, ментора, код-ревьюера и куратора.
Все эти люди — люди, поэтому создадим базовый класс
Human со свойством name (у каждого человека должно быть имя) и методом answer_question() для ответов на вопросы.По умолчанию объект
Human будет отвечать на любой вопрос так: «Очень интересный вопрос! Не знаю.»От класса
Human унаследуем классы Student, Mentor, CodeReviewer и Curator. Student должен уметь задавать вопросы. Реализуйте в классе
Student метод ask_question(Human, question). При вызове этот метод должен:
1. Напечатать на экране вопрос в формате <имя человека, которому задаём вопрос>, <текст вопроса>
2. Задать вопрос question человеку, объекту класса Human. Имя объекта, которому адресован вопрос, передаётся при вызове метода ask_question().Объекты классов
Mentor, CodeReviewer и Curator должны уметь отвечать на вопросы при вызове метода answer_question(). Задан непредусмотренный вопрос — для него подойдёт ответ по умолчанию.После того как вы допишете код, ваша программа должна вывести на экран такой текст:
Марина, мне грустненько, что делать?
Держись, всё получится. Хочешь видео с котиками?
Ира, мне грустненько, что делать?
Отдохни и возвращайся с вопросами по теории.
Евгений, когда каникулы?
Очень интересный вопрос! Не знаю.
Евгений, что не так с моим проектом?
О, вопрос про проект, это я люблю.
Виталя, как устроиться на работу питонистом?
Очень интересный вопрос! Не знаю.
Ира, как устроиться работать питонистом?
Сейчас расскажу. Подсказка
Чтобы вызвать метод
answer_question() у родительского класса, напишите super().answer_question(question)Код
xxxxxxxxxx67
1
23
1
class Human:2
def __init__(self, name):3
self.name = name4
5
# ответ по умолчанию для всех одинаковый, можно 6
# доверить его родительскому классу7
def answer_question(self, question):8
print(...)9
10
11
class Student(Human):12
# метод ask_question() принимает параметр someone:13
# это объект, экземпляр класса Curator, Mentor или CodeReviewer,14
# которому Student задаёт вопрос; 15
# параметр question — это просто строка16
# имя объекта и текст вопроса задаются при вызове метода ask_question17
def ask_question(self, someone, question):18
# напечатайте на экран вопрос в нужном формате19
print(...)20
# запросите ответ на вопрос у someone21
22
print() # этот print выводит разделительную пустую строку 23
24
25
class Curator(Human):26
def answer_question(self, question):27
# здесь нужно проверить, пришёл куратору знакомый вопрос или нет28
# если да - ответить на него29
# если нет - вызвать метод answer_question() у родительского класса30
31
# объявите и реализуйте классы CodeReviewer и Mentor32
33
34
# следующий код менять не нужно, он работает, мы проверяли35
student1 = Student('Тимофей')36
curator = Curator('Марина')37
mentor = Mentor('Ира')38
reviewer = CodeReviewer('Евгений')39
friend = Human('Виталя')40
41
student1.ask_question(curator, 'мне грустненько, что делать?')42
student1.ask_question(mentor, 'мне грустненько, что делать?')43
student1.ask_question(reviewer, 'когда каникулы?')44
student1.ask_question(reviewer, 'что не так с моим проектом?')45
student1.ask_question(friend, 'как устроиться на работу питонистом?')46
student1.ask_question(mentor, 'как устроиться работать питонистом?')